iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
Vibe Coding

夢幻甜品師闖工程世界:Vibe Coding vs 專業開發的 0→1 冒險攻略系列 第 8

Day 8|AI 也需要一本入職手冊:CLAUDE.md、AGENTS.md 怎麼讓它進專案前先讀懂規矩?

  • 分享至 

  • xImage
  •  

昨天,我們把網站從 Wireframe、Mockup 一路看到 Prototype,總算把「這個產品應該長什麼樣子」慢慢對齊了。

但真的要開始寫 Code 以前,還有另一個角色也需要先對齊:

AI。

以前我用 AI 輔助開發功能時,會把那些專案規則一直塞進當下 Prompt:

「改了資料模型記得一起做 migration。」
「這類修改完成後要跑對應測試。」
「做 UI 前先看我們的視覺規格文件。」

一次兩次還好。

但只要開一個新的 Session,又得重新講一遍。

而且 Claude Code 官方文件一開始就直接提醒了一件很重要的事:

每一次新的工作階段(Session),都是一個全新的脈絡視窗(Context Window)。

翻成白話就是:

你昨天跟它講過的所有事情,今天全部歸零。

所以 Claude Code 和 Codex 都提供了一種很重要的機制:

把長期需要 AI 知道的專案規則,直接寫進專案裡。

這就是 CLAUDE.mdAGENTS.md 這類文件在做的事。


CLAUDE.md、AGENTS.md 到底是什麼?

可以先把它們理解成:

專門寫給 Coding Agent 看的工作規則。

其中,Claude Code 主要使用 CLAUDE.md

AGENTS.md 不是 Codex 專屬的檔案,而是一種給 Coding Agent 使用的開放格式。Codex 支援它,另外也有其他 Coding Agent 和開發工具採用這個格式。

所以它們不是同一套系統,但背後要解決的問題很接近:

讓 Coding Agent 在開始工作以前,先知道這個專案有哪些長期需要遵守的規則。

例如:

# Development Rules

- 修改介面時遵守既有視覺規格
- 修改資料模型後建立對應 migration
- 修改認證邏輯時補上測試

這些不是「這一次任務」才臨時出現的要求。

而是:

只要在這個專案裡工作,就長期成立的規則。

所以它和一般 Prompt 扮演的角色不太一樣。

Prompt 比較像:

這一次,幫我修改登入頁。

CLAUDE.md / AGENTS.md 比較像:

不管你今天要改什麼,先知道這間廚房平常怎麼工作。

如果把 Coding Agent 想成剛進甜點工作室的新夥伴,我不需要每次請它做一顆蛋糕,都重新介紹一次烤箱放在哪裡、出餐標準是什麼、哪些材料不能亂換。

那些長期規則,本來就應該有一個固定的位置。


那跟 README.md 有什麼不一樣?

我第一次看到這類檔案時,其實也會想:

「這不就是 README 嗎?」

兩者的確可能會有一些內容重疊,但主要服務的讀者不同。

文件 主要讀者 比較適合放什麼
README.md 專案用途、安裝方式、啟動方式、技術介紹
CLAUDE.md / AGENTS.md Coding Agent 工作規則、慣例、限制、完成標準、重要文件位置

例如:

這個專案使用 Vue 3。

比較像專案背景。

但:

新增 UI 以前,先檢查現有共用元件,不要另外建立重複元件。

就是一條很明確的工作規則。

所以如果先用最白話的方式分:

README.md 主要是給人看的專案說明;CLAUDE.md / AGENTS.md 則是給 Coding Agent 看的工作說明。


規則不是只有一層,而且會疊加

這類文件另一個很重要的概念,就是 Scope(作用範圍)

不是所有規則都一定要塞進專案根目錄。

有些是我自己跨所有專案都會用到的偏好。

有些是整個團隊共同遵守的專案規範。

還有一些,只跟某個專案、某個資料夾,甚至只跟我自己有關。

https://ithelp.ithome.com.tw/upload/images/20260831/20183484cZElSAxBwN.png

以 Claude Code 來說,可以先把 Scope 想成幾個不同層級:

Scope 檔案 適用範圍
使用者層 ~/.claude/CLAUDE.md 只有自己,但跨所有專案
專案層/團隊 ./CLAUDE.md./.claude/CLAUDE.md 目前專案,團隊共用
專案層/個人 ./CLAUDE.local.md 只有自己+目前這個專案,通常不進版控
子資料夾層 子資料夾裡的 CLAUDE.md / CLAUDE.local.md 只在處理該區域相關工作時使用

例如:

~/.claude/CLAUDE.md 可以放我自己跨所有專案都習慣的工作方式。

專案根目錄的 CLAUDE.md,則適合放整個團隊在這個專案裡共同遵守的規則。

如果有一些規則只有我自己在這個專案裡需要,例如個人的 sandbox URL、測試資料偏好,或不需要分享給團隊的開發習慣,就可以放在 CLAUDE.local.md

因為它只屬於自己,所以通常會加進 .gitignore,不提交進版本控制。

而如果某些規則只跟特定資料夾有關,也可以再往更深的目錄放。

例如:

project/
├── CLAUDE.md
├── CLAUDE.local.md
├── frontend/
│   └── CLAUDE.md
└── backend/
    └── CLAUDE.md

根目錄的 CLAUDE.md 可以放整個專案都要遵守的共同規則:

- 修改完成後執行測試
- 不提交敏感資訊

frontend/CLAUDE.md 再補上更貼近前端工作的規則:

- UI 遵守 Design System
- 修改畫面時確認 Desktop / Mobile

這些規則不是彼此完全獨立,而是會依照工具自己的載入機制一起作用。

外層負責比較廣泛的共同規則。

越往專案內部、越靠近實際工作的資料夾,就可以補上越貼近那個情境的規則。

所以分層真正重要的不是:

「我要多寫幾份文件。」

而是:

「這條規則到底應該管多大的範圍?」

跨所有專案都適用的,放使用者層。

整個專案都需要的,放專案層。

只有自己在這個專案需要的,放 CLAUDE.local.md

只有某個區域需要的,就往更靠近那個資料夾的位置放。

規則會疊加,而越靠近實際工作的地方,就越能補上更精準的情境資訊。

不過這裡也要注意:至少在 Claude Code 裡,不能簡化成「越內層就一定硬性覆蓋外層」。

這些內容會一起進入 Context;如果規則彼此衝突,最好不要依賴固定的覆蓋順序,而是直接把規則寫得一致,或在更具體的文件裡明確說清楚哪一條應該優先。

所以 Scope 的目的不是製造互相打架的規則,而是:

讓共同規則留在外層,情境越特殊,規則就放得越靠近真正需要它的地方。


第一份怎麼建立?先打一個 /init

知道它是什麼之後,下一個問題就是:

「好,那第一份我要自己從零開始寫嗎?」

不用。

Claude Code 和 Codex 都有一個很方便的起點:

/init

Claude Code 可以用 /init 幫目前的 Codebase 建立一份起始版 CLAUDE.md

Codex 也可以用 /init,替目前專案產生 AGENTS.md 的基本架構。

AI 會先掃過目前的專案,再整理出一份初始文件。

通常會包含像:

  • 專案大概在做什麼
  • 使用哪些技術
  • 怎麼啟動、建置、測試
  • 資料夾結構
  • 從現有 Code 觀察到的開發方式

超級方便。

第一次看到真的很容易有一種:

「欸?那我是不是打一行就結束了(笑)」

的感覺。

但問題也剛好出在這裡:

它很容易太完整。


/init 是起點,不是完成版

AI 掃完整個專案之後,很自然會把它看到的東西整理進去。

例如:

這個專案使用 Vue
這個專案使用 Express
有 components 資料夾
有 controllers 資料夾
package.json 裡有哪些 scripts

問題是:

其中很多東西,下一次 AI 自己再掃一次專案還是找得到。

如果本來幾秒就能從 package.json、目錄結構或 Code 看出來,我們就要開始問:

真的值得讓 AI 每一次開工以前,都重新讀一次嗎?

這也是 Claude Code 官方在談這類文件修剪時很強調的方向。

Claude Code 有一個健檢指令 /doctor,官方給出的修剪思路其實很直接:

把 AI 自己能從 Code 推導出來的內容砍掉。

像:

  • 目錄結構
  • 相依套件清單
  • 一般性的架構概述

反而留下:

  • 團隊真的踩過的雷
  • 某個決策背後的理由
  • 跟工具預設不同的特殊慣例

所以我會把 /init 想成:

先幫我把材料全部倒到料理台上。

接下來不是繼續加東西。

是先挑掉那些根本不用一直放在桌上的材料。


先做減法:三個問題就夠了

面對 /init 產生的內容,我覺得可以先問三個問題。

問題 判斷方式
AI 自己找得到嗎? 翻一下 Code、README、package.json 就知道的資訊,需要每次重複讀嗎?
大部分工作真的都會用到嗎? 如果只跟前端或某個資料夾有關,是否應該移到更精準的 Scope?
過一陣子還會成立嗎? 很快可能過期的暫時性規則,適合一直留在長期指令裡嗎?

這三題其實都在做同一件事:

判斷這條資訊到底值不值得每次跟著 Coding Agent 一起進入工作脈絡。

AI 自己找得到。

不是大部分任務都需要。

又很容易過期。

這類資訊就不用急著一直留著。

減完之後,才進到真正重要的第二步:

把 AI 自己不一定知道,但我們真的很希望它知道的事情加回來。


再做加法:什麼才值得留下?

這裡我會用五種類型來判斷。

類型 要留下什麼
不能搞錯的規則 光看 Code 不一定知道,但做錯會出問題的業務或安全決策
固定的處理方式 團隊做某件事時固定遵守的順序或流程
容易漏掉的連動關係 改 A 時,還有哪些地方必須一起確認
完成定義(Definition of Done) 做到什麼程度才叫真的完成
重要資料的位置 不把整份規範塞進來,而是告訴 AI 真正答案去哪裡找

這五種類型有一個共同點:

它們通常不是 Coding Agent 單純掃 Code 就一定能理解的東西。

Code 可以讓 AI 看見:

這裡有 Rate Limiter。

但不一定能告訴它:

這是團隊刻意留下的安全設計,不應該為了方便就直接拿掉。

Code 也可以讓 AI 看見很多測試。

但不一定能告訴它:

團隊把「補完對應測試」當成某一類修改的完成條件。

這些「團隊自己知道、但 Code 不一定說得完整」的資訊,才是這類文件很有價值的地方。


詳細規格不用全部塞進來,告訴 AI 去哪裡找就好

第五種「重要資料的位置」,我覺得特別值得拆出來講。

因為很容易發生另一個極端:

既然 AI 要知道設計規範,那就把整份設計規範全部貼進 AGENTS.md

既然 AI 要知道部署流程,那整份 Deployment Guide 也一起搬進來。

久了以後,一份文件就變成大型百科全書。

其實完全不用。

例如:

介面實作請遵守:
docs/BuJo_Visual_Specification_v1.md

就已經提供了一個非常重要的資訊:

現在碰到 UI 任務,你應該去哪裡找真正的規格。

需要時再去讀。

不需要時,就不用每次都把整本文件一起扛在身上。

對我來說,這很像不是把整間圖書館搬到 AI 面前,而是先給它一張索引:

「你要找的那本書,在第三排。」


同時用 Claude Code 和支援 AGENTS.md 的工具,規則要維護兩份嗎?

這時又會碰到另一個很實際的問題。

假設專案裡同時有:

CLAUDE.md
AGENTS.md

而兩份裡面有很多共同規則。

難道同一件事要維護兩次嗎?

今天 AGENTS.md 更新了。

明天忘記同步 CLAUDE.md

最後兩個 Coding Agent 拿到的規則又開始不一樣。

而 Claude Code 官方其實直接提供了一個很好用的解法:

Import。

CLAUDE.md 可以用:

@path/to/file

引用其他文件。

所以如果團隊決定把跨工具共用的規則集中放在 AGENTS.md,就可以直接在 CLAUDE.md 寫:

@AGENTS.md

讓 Claude Code 一起載入它。

也就是:

AGENTS.md
    ↓
共通的 Agent 規則

CLAUDE.md
    ↓
@AGENTS.md
    ↓
Claude Code 讀取共通規則

這是 Claude Code 官方提供的 Import 機制

不是 AGENTS.md 這個格式本身規定的特殊語法。

但它剛好可以解決多工具協作時很麻煩的一件事:

同一份共同規則,不需要複製兩次。

讓其中一份成為 Single Source of Truth(單一真理來源),另一份直接引用。

畢竟建立這些規則,本來就是為了減少混亂。

如果最後反而留下兩份幾乎一模一樣、還要人工祈禱它們永遠同步的文件,就有點本末倒置了。


BuJo 當時也真的有把這些規則留下來

回頭看 BuJo,我們前後端其實都有自己的 AI 指令檔。

而且裡面留下的,也真的有那些「AI 光看 Code 不一定知道」的事情。

像後端會提醒:

修改資料模型時,要搭配對應 migration。

前端則直接指向視覺規格文件,提醒 AI 做介面實作時要遵守那份 Specification。

一個留下固定的處理方式。

一個告訴 AI 真正的規格去哪裡找。

現在重新看,我反而覺得這比把整個專案重新介紹一次實用很多。


那麼今天的主題——專案層級 AI 指令文件,在 Vibe Coding 和專業開發上的差異在哪呢?

想像我第一次開 Claude Code,很認真地說:

「改 Schema 記得做 migration。」
「UI 記得看視覺規格。」
「改完記得跑測試。」

第二次開新的 Session,再講一次。

到了第五次開始覺得:

「這個我之前不是講過了嗎?」

結果少提醒了一條。

換成隊友開另一個 Coding Agent,那個 Agent 更是從頭到尾都沒有聽過。

這些規則如果一直存在人的記憶和當下 Prompt 裡,不只要重複花時間溝通,每個人交給 AI 的「專案規則版本」也可能慢慢不一樣。

  • Vibe Coding:規則主要存在人的記憶和當下 Prompt 裡,換 Session、換人就重新溝通,很容易漏,也很難形成穩定的團隊共同語言
  • 專業開發:把長期共通的規則沉澱成專案指令檔,減少反覆解釋,也讓不同成員使用 Coding Agent 時有同一套工作基準;但只留下真正值得每次載入的資訊

少掉重複解釋,自然也可以減少一部分重複 Prompt 帶來的 Token 和溝通成本。

但反過來,如果我因此把所有專案資訊全部塞進去,也只是從另一邊浪費 Context。

Coding Agent 每次開工,都得先處理一次它自己其實找得到的事情。

真正重要的那幾條規則,反而被一大堆資訊淹沒。

沒有規則會亂;規則太多,也一樣會亂。


寫完不是完成,它其實是一份活文件

我現在最在意的,是 CLAUDE.md / AGENTS.md 寫好之後還要一直被維護。

我原本很容易把這類東西想成:

「太好了!設定完成,以後就不用管了。」

但 Codebase 會改。

工作流程會改。

Coding Agent 自己的能力也會一直變。

今天很重要的一條提醒,幾個月後可能早就已經不是問題。

如果每次 AI 犯錯就加一條,卻從來不刪,最後這份文件一定會越來越肥。

甚至可能同時存在:

現在的規則
過去的規則
重複的規則
互相打架的規則

原本拿來減少溝通的工具,反而開始製造新的誤解。

所以我現在反而會把它理解成一份 活文件(Living Document)

踩到新的雷,可以新增。

專案改變了,就修改。

已經不再需要的護欄,也要敢刪。

它不是一次寫到完美的規格書。

比較像一座需要一直整理的花園。

真正讓 AI 長期更懂專案的,不是第一次把規則寫得多完整。

而是一直有人回頭問:

「這一條,現在還值得 AI 每次開工都先知道嗎?」

值得,就留下。

不值得,就修掉。

到這裡,「規劃設計」這一關也差不多走完了。

明天開始正式進入核心開發——如果專案換一台電腦,為什麼不能只靠一句:

「可是我這裡明明跑得動呀?」

下一篇,就從環境建置和 package.json 開始拆。


參考資料


上一篇
Day 7|食材備好了,那擺盤呢?介面設計的三層階梯
下一篇
Day 9|甜點還沒開始做,先確認廚房能不能開工:從環境建置看懂 package.json 與 npm
系列文
夢幻甜品師闖工程世界:Vibe Coding vs 專業開發的 0→1 冒險攻略9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言